﻿using System.Collections.Generic;
using System;
using DATA.Base;
using DATA.BusinessObjects;
using DATA.ManagerObjects;
using DATA.UnitTests;
using NHibernate;
using NHibernate.Criterion;

namespace BUS
{
    public class KhachHangBUS
    {
        #region Len - Them moi khach hang
        public static bool ThemKhachHang(Khachhang kh)
        {
            bool flag = false;
            ISession isession = NHibernateSessionManager.Instance.Session.GetISession();
            ITransaction iTrans = null;
            try
            {
                iTrans = isession.BeginTransaction();
                isession.Save(kh);
                iTrans.Commit();
                flag = true;
            }
            catch (Exception ex)
            {
                iTrans.Rollback();
                isession.Close();
                throw new Exception("Lỗi, không thêm được khách hàng", ex);
            }
            return flag;
        }
        #endregion

        #region Binh - Lấy khách hàng mới nhất
        public static Khachhang LayKhachHangMoiNhat()
        {
            Khachhang kh = null;
            IManagerFactory MF = new ManagerFactory();
            IKhachhangManager KHM = MF.GetKhachhangManager();
            String sql = "FROM Khachhang kh "
                        + "WHERE length(kh.Id) = (Select MAX(length(kh.Id)) "
                                                + "from Khachhang kh) "
                        + "ORDER BY kh.Id desc";

            IList<Khachhang> list = KHM.GetByQuery(sql);
            kh = list[0];
            return kh;
        }
        #endregion

        #region Len - Tạo mã khách hàng tăng tự động
        public static string MaKhachHangTangTuDong(String maKH)
        {
            string maKHTuDong = "MKH";
            try
            {
                int intMa = 0;
                intMa = int.Parse(maKH.Substring(3));
                maKHTuDong = maKHTuDong + (intMa + 1).ToString();
            }
            catch (Exception ex)
            {
                throw new Exception("Lỗi, không tạo mã khách hàng tự động được", ex) ;
            }
            return maKHTuDong;
        }
        #endregion

        #region Bình - Tìm kiếm khách hàng
        public static IList<Khachhang> TimKiem(Khachhang kh)
        {
            IList<Khachhang> list = null;

            IManagerFactory MF = new ManagerFactory();
            IKhachhangManager KHM = MF.GetKhachhangManager();

            String hql = "FROM Khachhang kh WHERE 1=1";
            if(kh.Cmnd != "")
            {
                hql += " and kh.Cmnd like '%" + kh.Cmnd + "%'";
            }
            if(kh.DiaChi != "")
            {
                hql += " and kh.DiaChi like '%" + kh.DiaChi + "%'";
            }
            if(kh.TenKhachHang != "")
            {
                hql += " and kh.TenKhachHang like '%" + kh.TenKhachHang + "%'";
            }
            if(kh.Loaikhach.Id != "0")
                hql += " and kh.Loaikhach.Id = '" + kh.Loaikhach.Id + "'";

            list = KHM.GetByQuery(hql);

            return list;
        }
        #endregion

        #region Lên - Lấy Khách hàng theo mã
        public static Khachhang LayKhachHangTheoMaKhachHang(string maKhachHang)
        {
            Khachhang khachHang = null;
            try
            {
                IManagerFactory iMF = new ManagerFactory();
                IKhachhangManager iKH = iMF.GetKhachhangManager();
                khachHang = iKH.GetById(maKhachHang);
            }
            catch (Exception ex)
            {
                throw new Exception("Lỗi, không lấy được khách hàng", ex);
            }
            return khachHang;
        }
        #endregion

        #region Lên - Cập nhật khách hàng
        public static Boolean CapNhatKhachHang(Khachhang kh)
        {
            bool flag = false;
            ISession isession = NHibernateSessionManager.Instance.Session.GetISession();
            ITransaction iTrans = null;
            try
            {
                iTrans = isession.BeginTransaction();
                isession.Update(kh);
                iTrans.Commit();
                flag = true;
            }
            catch (Exception ex)
            {
                iTrans.Rollback();
                isession.Close();
                throw new Exception("Lỗi, không cập nhật được khách hàng", ex);
            }
            return flag;
        }
        #endregion
    }
}
